<?php
// +----------------------------------------------------------------------
// | ThinkCMF [ WE CAN DO IT MORE SIMPLE ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013-2017 http://www.thinkcmf.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Powerless < wzxaini9@gmail.com>
// +----------------------------------------------------------------------
namespace app\user\controller;

use app\user\model\UserModel;
use cmf\controller\HomeBaseController;
use think\Validate;

class LoginController extends HomeBaseController {

	/**
	 * 登录
	 */
	public function index() {
		$redirect = $this->request->post("redirect");
		if (empty($redirect)) {
			$redirect = $this->request->server('HTTP_REFERER');
		} else {
			$redirect = base64_decode($redirect);
		}
		session('login_http_referer', $redirect);
		if (cmf_is_user_login()) {
			//已经登录时直接跳到首页
			return redirect($this->request->root() . '/');
		} else {
			return $this->fetch(":login");
		}
	}

	/**
	 * 登录验证提交
	 */
	public function doLogin() {
		if ($this->request->isPost()) {
			$validate = new Validate([
				'captcha' => 'require',
				'username' => 'require',
				'password' => 'require|min:6|max:32',
			]);
			$validate->message([
				'username.require' => '用户名不能为空',
				'password.require' => '密码不能为空',
				'password.max' => '密码不能超过32个字符',
				'password.min' => '密码不能小于6个字符',
				'captcha.require' => '验证码不能为空',
			]);

			$data = $this->request->post();
			if (!$validate->check($data)) {
				$this->error($validate->getError());
			}

			if (!cmf_captcha_check($data['captcha'])) {
				$this->error('验证码错误');
			}

			$userModel = new UserModel();
			$user['user_pass'] = $data['password'];
			if (Validate::is($data['username'], 'email')) {
				$user['user_email'] = $data['username'];
				$log = $userModel->doEmail($user);
			} else if (preg_match('/(^(13\d|15[^4\D]|17[013678]|18\d)\d{8})$/', $data['username'])) {
				$user['mobile'] = $data['username'];
				$log = $userModel->doMobile($user);
			} else {
				$user['user_login'] = $data['username'];
				$log = $userModel->doName($user);
			}
			$session_login_http_referer = session('login_http_referer');
			$redirect = empty($session_login_http_referer) ? $this->request->root() : $session_login_http_referer;
			switch ($log) {
			case 0:
				cmf_user_action('login');
				$this->success('登录成功', $redirect);
				break;
			case 1:
				$this->error('登录密码错误');
				break;
			case 2:
				$this->error('账户不存在');
				break;
			case 3:
				$this->error('账号被禁止访问系统');
				break;
			default:
				$this->error('未受理的请求');
			}
		} else {
			$this->error("请求错误");
		}
	}

	/**
	 * 手机验证码快速登录，适用于手机端web端快速登录
	 * @return [type] [description]
	 */
	public function quickLogin() {
		if ($this->request->isPost()) {
			$validate = new Validate([
				// 'captcha' => 'require',
				'username' => 'require',
				'code' => 'require|length:6',
			]);
			$validate->message([
				'username.require' => '手机号不能为空',
				'code.require' => '验证码不能为空',
				'code.length' => '验证码为6位数字',
				// 'captcha.require' => '验证码不能为空',
			]);

			$data = $this->request->post();
			if (!$validate->check($data)) {
				$this->error($validate->getError());
			}

			$errMsg = cmf_check_verification_code($data['username'], $data['code']);
			if (!empty($errMsg)) {
				$this->error($errMsg);
			}

			$userModel = new UserModel();

			//手机号快速登录
			if (preg_match('/(^(13\d|15[^4\D]|16[^4\D]|19[^4\D]|17[013678]|18\d)\d{8})$/', $data['username'])) {
				$user['mobile'] = $data['username'];
				$log = $userModel->doQuickMobile($user);
			}

			//URL跳转
			$session_login_http_referer = session('login_http_referer');

			$redirect = $session_login_http_referer;

			switch ($log) {
			case 0:
				cmf_user_action('login');
				$this->success(lang('LOGIN_SUCCESS'), $redirect);
				break;
			case 1:
				$this->error(lang('PASSWORD_NOT_RIGHT'));
				break;
			case 2:
				//账户不存在时创建账户,用户账户不存在，即为首次登陆
				$user['mobile'] = $data['username'];
				$user['user_pass'] = cmf_random_string(); //随机字符串密码

				$reglog = $userModel->registerMobile($user);

				//发送随机密码给用户手机，并跳转
				if ($reglog == 0) {
					//todo 发送密码到用户收还有问题，报服务商返回错误
					// $param = ['mobile' => $data['username'], 'code' => $user['user_pass']];
					// $result = hook_one("send_mobile_verification_code", $param);
					$this->success(lang('LOGIN_SUCCESS'), $redirect);
				}
				// $this->error('账户不存在');

				break;
			case 3:
				$this->error('账号被禁止访问系统');
				break;
			default:
				$this->error('未受理的请求');
			}
		} else {
			$this->error("请求错误");
		}
	}

	/**
	 * 找回密码
	 */
	public function findPassword() {
		return $this->fetch('/find_password');
	}

	/**
	 * 用户密码重置
	 */
	public function passwordReset() {

		if ($this->request->isPost()) {
			$validate = new Validate([
				'captcha' => 'require',
				'verification_code' => 'require',
				'password' => 'require|min:6|max:32',
			]);
			$validate->message([
				'verification_code.require' => '验证码不能为空',
				'password.require' => '密码不能为空',
				'password.max' => '密码不能超过32个字符',
				'password.min' => '密码不能小于6个字符',
				'captcha.require' => '验证码不能为空',
			]);

			$data = $this->request->post();
			if (!$validate->check($data)) {
				$this->error($validate->getError());
			}

			if (!cmf_captcha_check($data['captcha'])) {
				$this->error('验证码错误');
			}
			$errMsg = cmf_check_verification_code($data['username'], $data['verification_code']);
			if (!empty($errMsg)) {
				$this->error($errMsg);
			}

			$userModel = new UserModel();
			if ($validate::is($data['username'], 'email')) {

				$log = $userModel->emailPasswordReset($data['username'], $data['password']);

			} else if (preg_match('/(^(13\d|15[^4\D]|17[013678]|18\d)\d{8})$/', $data['username'])) {
				$user['mobile'] = $data['username'];
				$log = $userModel->mobilePasswordReset($data['username'], $data['password']);
			} else {
				$log = 2;
			}
			switch ($log) {
			case 0:
				$this->success('密码重置成功', $this->request->root());
				break;
			case 1:
				$this->error("您的账户尚未注册");
				break;
			case 2:
				$this->error("您输入的账号格式错误");
				break;
			default:
				$this->error('未受理的请求');
			}

		} else {
			$this->error("请求错误");
		}
	}

}